package foot.stateless;

import java.util.Collection;

import foot.modele.Arbitre;
import foot.modele.Equipe;
import foot.modele.Joueur;
import foot.modele.Match;


/**
 * Cette interface definit les methodes indispensable pour la gestion d'un tournoi, 
 * Elle devra etre implementée dans la classe TournoiBean, TournoiLocal et TournoiRemote
 * @author alexandre
 *
 */
public interface ITournoi {
	
	
	//-------------enum de type
	public static enum etat {
		INSCRIPTION,MATCHGENERE,ENCOURS,TERMINER;  
		public static int toInt(etat x) {
	        switch(x) {
	        case INSCRIPTION:
	            return 0;
	        case MATCHGENERE:
	            return 1;
	        case ENCOURS:
	        	return 2;
	        case TERMINER:
	        	return 3;
	        }
	        return -1;
	    }
		public static etat fromInt(int x) {
	        switch(x) {
	        case 0:
	            return INSCRIPTION;
	        case 1:
	            return MATCHGENERE;
	        case 2:
	        	return ENCOURS;
	        case 3:
	        	return TERMINER;
	        }
	        return null;
	    }
	} 
	//------------- Matchs
	//renvoie tous les matchs
	public Collection<Match> getTouslesMatchs();
	
	//renvoie tous les matchs lies à un arbitre
//	public Collection<Match> getTouslesMatchsDUnArbitre(Arbitre a);
	
	//renvoie le match correspondant à l'id
	public Match getMatchAvecId(int id);
	
	/**
	 * @return retourne la finale du tournoi
	 */
	public Match getMatchRacine();
	
	public void ajouterMatch(Match m);
	
	//genere les tours
	public void genererTours();
	
	//------------- Equipe
	//ajouter une équipe
	public void ajouterEquipe(Equipe e);
	
	//recupere toutes les équipes
	public Collection<Equipe> getToutesLesEquipes();
	
	//recuperer une équipe
	public Equipe getEquipeAvecId(int id);
	
	//genere un set exemple si aucune équipe n'est crée
	public void peuplerEquipe();
	//dis si un set d'arbitres a deja été généré
	public boolean getGenA();
	
	//dis si un set d'equipe a deja été généré
	public boolean getGenE();
	

	
	//------------- Tournoi
	//retourne l'état du tournoi
	public etat getEtat();
	
	public void setEtat(etat e);
	//------------- Arbitre
	
	//ajouter un arbitre
	public void ajouterArbitre(Arbitre a);
	
	//recup un arbitre avec son id
	public Arbitre getArbitreAvecID(int id);
	
	//recup tous les arbitres
	public Collection<Arbitre> getTousLesArbitres();
	
	//genere un set arbitre si aucun arbitre est rajoute
	public void peuplerArbitre();
	
	//-------------- Admin
	//permet de loger en tant qu'admin
	public boolean login(String login, String mdp);
		
	//-------------- misc
	
	//ajouter un but
	void ajouterButAMatch(Match m, Joueur auteur, String heure,
			boolean tir_au_but);
	
	//affecter arbitre à match
	public void affecterArbitreAMatch(Arbitre a, Match m);

	//Récupère tous les matchs non terminés
	public Collection<Match> getTousLesMatchsEnCours();
	
	//Met fin au match
	public void validerMatch(Match m);
	
	//retrouver un joueur à partir de son id
	public Joueur getJoueurWithId(int id);

	//inscrit l'équipe dans le tournoi
	void inscrireEquipe(String nomEquipe, String[] lesNoms, String[] lesPrenoms);

	//Inscrit les arbitres dans le tournoi
	public void inscrireArbitres(String[] lesNoms, String[] lesPrenoms);
	
	//Retourne tous les matchs sans arbitres
	public Collection<Match> MatchsSansArbitre();
	
	//Met à jout le match
	public void MAJMatch();

	
}
